package com.vegetable.modules.controller.stock;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.vegetable.common.utils.R;
import com.vegetable.modules.entity.stock.to.PriceElementChangeQueryTO;
import com.vegetable.modules.entity.stock.to.PriceElementDetailQueryTO;
import com.vegetable.modules.entity.stock.to.PriceTrendQueryTO;
import com.vegetable.modules.service.stock.IPriceElementChangeService;
import com.vegetable.modules.vo.PriceElementChangeVO;
import com.vegetable.modules.vo.PriceElementDetailVO;
import com.vegetable.modules.vo.PriceTrendVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
 * <p>
 * 价格要素变动控制器
 * </p>
 *
 * @author Qwen
 * @since 2025-09-27
 */
@Slf4j
@RestController
@RequestMapping("/stock/priceElementChange")
@Api(tags = "价格要素变动")
public class PriceElementChangeController {

    @Resource
    private IPriceElementChangeService priceElementChangeService;

    /**
     * 分页查询价格要素变动记录
     */
    @PostMapping("/list")
    @ApiOperation("分页查询价格要素变动记录")
    public R list(@RequestBody PriceElementChangeQueryTO queryTO) {
        try {
            // 只查询具体某天的数据，不按时间范围查询
            // 如果没有设置查询日期，默认查询当天数据
            if (queryTO.getStartTime() == null && queryTO.getEndTime() == null) {
                queryTO.setStartTime(new Date());
                queryTO.setEndTime(new Date());
            } else if (queryTO.getStartTime() != null && queryTO.getEndTime() == null) {
                // 如果只设置了开始时间，结束时间也设为同一天
                queryTO.setEndTime(queryTO.getStartTime());
            } else if (queryTO.getStartTime() == null && queryTO.getEndTime() != null) {
                // 如果只设置了结束时间，开始时间也设为同一天
                queryTO.setStartTime(queryTO.getEndTime());
            }
            // 如果开始时间和结束时间都设置了，但不是同一天，则统一使用开始时间作为查询日期
            else if (!queryTO.getStartTime().equals(queryTO.getEndTime())) {
                queryTO.setEndTime(queryTO.getStartTime());
            }
            
            IPage<PriceElementChangeVO> page = priceElementChangeService.queryPriceElementChanges(queryTO);
            return R.data(page);
        } catch (Exception e) {
            log.error("查询价格要素变动记录失败", e);
            return R.fail("查询失败：" + e.getMessage());
        }
    }

    
    /**
     * 查询价格要素详细记录列表
     */
    @PostMapping("/listDetails")
    @ApiOperation("查询价格要素详细记录列表")
    public R listDetails(@RequestBody PriceElementDetailQueryTO queryTO) {
        try {
            List<PriceElementDetailVO> list = priceElementChangeService.listPriceElementDetails(queryTO);
            return R.data(list);
        } catch (Exception e) {
            log.error("查询价格要素详细记录列表失败", e);
            return R.fail("查询失败：" + e.getMessage());
        }
    }
    
    /**
     * 查询价格趋势
     */
    @PostMapping("/priceTrend")
    @ApiOperation("查询价格趋势")
    public R priceTrend(@RequestBody PriceTrendQueryTO queryTO) {
        try {
            List<PriceTrendVO> list = priceElementChangeService.listPriceTrend(queryTO);
            return R.data(list);
        } catch (Exception e) {
            log.error("查询价格趋势失败", e);
            return R.fail("查询失败：" + e.getMessage());
        }
    }
}